1
การสอบสวนผลการเรียน
DSAI2202Lab 8: Composing Data Operations

ทีมสนับสนุนวิชาการต้องการรายชื่อ การลงทะเบียนที่ยังใช้งานอยู่ซึ่งผลการเรียนช่วงล่าสุดลดลง โดยเปรียบเทียบนักศึกษาแต่ละคนกับผลการเรียนก่อนหน้าของตนเองในรายวิชาเดียวกัน

กำหนดกติกาให้ตรงกัน

  1. ใช้สองช่วงเวลา: earlier และ recent โดยแต่ละช่วงมีการประเมินสองครั้งที่ให้น้ำหนักเท่ากัน
  2. ต้องมีคะแนนที่ไม่เป็น NULL อย่างน้อยสองรายการใน แต่ละ ช่วงเวลา ก่อนนำค่าเฉลี่ยมาเปรียบเทียบ
  3. คำนวณ decline_points = earlier_avg - recent_avg
  4. หากคะแนนลดลงอย่างน้อย 15 คะแนน ให้ถือเป็น Review มิฉะนั้นการลงทะเบียนที่มีสิทธิ์จะได้สถานะ No alert
  5. แยก Insufficient data ออกมาต่างหาก เลขศูนย์เป็นคะแนนที่ใช้ได้ ส่วนค่า NULL หรือบันทึกที่หายไปไม่ถือเป็นศูนย์

เตรียมฐานข้อมูลของคุณ

เปิดไฟล์ lab8_setup.sql ที่ให้มา จากโฟลเดอร์ TA DSAI2202/lab8/ ใน pgAdmin แล้วรันไฟล์ทั้งหมด ใช้การตั้งค่าการเชื่อมต่อทางด้านขวาอีกครั้งทุกครั้งที่คุณเปิดการเชื่อมต่อใหม่

ชุดติดตั้งยังมี performance_comparison ซึ่งเป็นคิวรีที่บันทึกไว้เรียกว่า view ใช้ประกอบแบบฝึกหัดในลำดับถัดไป ไม่ใช่ตารางเพิ่มเติมที่เก็บผลการประเมิน

✍️ ตรวจสอบก่อนคำนวณ
ตรวจสอบ E01, E07, E08, E09 และ E24 ว่าครั้งไหนมีคะแนนเพียงพอในทั้งสองช่วงเวลา อธิบายว่าทำไมค่าศูนย์ของ E24 จึงเป็นหลักฐานที่หนักแน่นกว่าค่า NULL ของ E08
ตั้งค่า schema
SET search_path TO lab8;
ตรวจสอบจำนวนแถว
SET search_path TO lab8;

SELECT 'students' AS table_name, COUNT(*) AS row_count
FROM students
UNION ALL SELECT 'courses', COUNT(*) FROM courses
UNION ALL SELECT 'enrolments', COUNT(*) FROM enrolments
UNION ALL SELECT 'assessment_results', COUNT(*) FROM assessment_results
UNION ALL SELECT 'support_units', COUNT(*) FROM support_units
ORDER BY table_name;
ตรวจสอบหลักฐาน
SET search_path TO lab8;

SELECT e.enrolment_id, e.student_id, e.course_code,
       r.result_id, r.period, r.assessment_no, r.score
FROM enrolments AS e
JOIN assessment_results AS r
  ON r.enrolment_id = e.enrolment_id
WHERE e.enrolment_id IN ('E01', 'E07', 'E08', 'E09', 'E24')
ORDER BY e.enrolment_id, r.period, r.assessment_no;